//: Playground - noun: a place where people can play

import UIKit

//: # swfit 读书笔记

//: 下标:subscript 可写好几个只要参数不同 下标可以使用变量参数和可变参数，但不能使用输入输出参数，也不能给参数设置默认值
//: 下标重载:一个类或结构体可以根据自身需要提供多个下标实现，使用下标时将通过入参的数量和类型进行区分，自动匹配合适的下标，这就是下标的重载

struct TimesTable{
    var timeNum:Int = 0
    
    subscript (num:Int)->Int{
        return num * timeNum
    }
    
    subscript (numStr:String)->String{
        return "numStr-\(timeNum)"
    }
    
    subscript (someNum:Int...)->Int{
        var tempNum = 0
        
        for value in someNum{
            tempNum += value
        }
        return tempNum
    }
    
    //: returnString这个外部参数是为了区分 同名参数方法
    //: subscript (someNum:Int...)->String 和 subscript (someNum:Int...)->Int 是不能共存的
    subscript (returnString someNum:Int...)->String{
        var tempStr:String = "返回值是字符串 && "
        for value in someNum{
            tempStr.append("\(value)")
        }
        return tempStr
    }
    
}

let time = TimesTable (timeNum: 10)
print("subscript - num\(time[10]) ** \(time["zzp"]) ** \(time[3,12])) ** \(time [returnString: 123,123])")




